package main

import (
	"fmt"
	"net"
	"os"
	"path/filepath"
)

func main() {
	f, err := os.Open("C:\\Users\\Administrator\\Desktop\\NieR_Chinese\\下载前必看.txt")
	if err != nil {
		fmt.Println(err)
	}

	fmt.Println(f.Name(), "open success")

	/*
		如果仔细阅读打开函数的文档，可以看到它返回的是PathError类型的错误。PathError是一个struct类型
		PathError结构的路径字段包含导致错误的文件的路径。让我们修改上面写的程序，并打印出路径。
	*/

	f1, err := os.Open("C:\\Users\\Administrator\\Desktop\\NieR_Chinese\\下载前必看.txt")
	//使用类型断言获得错误接口的基本值
	if err, ok := err.(*os.PathError); ok {
		fmt.Println("File at path", err.Path, "failed to open")
		return
	}
	fmt.Println(f1.Name(), "opened successfully")

	//获得更多信息的第二种方法是断言底层类型，并通过调用struct类型的方法获取更多信息。
	addr, err := net.LookupHost("tuanzhang12c.com")
	if err, ok := err.(*net.DNSError); ok {
		if err.Timeout() {
			fmt.Println("超时")
		} else if err.Temporary() {
			fmt.Println("temporary error")
		} else {
			fmt.Println(err)
		}
	}

	fmt.Println("arr=", addr)

	files, err := filepath.Glob("[")
	if err != nil && err == filepath.ErrBadPattern {
		fmt.Println(err)
	}
	fmt.Println("matched files", files)

	//永远不要忽略错误 ！！！
	//files, _ := filepath.Glob("[")

}
